package com.ybkj.o2o.sales.mapper;


import com.ybkj.o2o.sales.entity.Coupon;

import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface CouponMapper {

    void updateCouponLine(Long lineId, String lineName);

    /**
     * 查询优惠券有哪些线路
     * @return
     */
    List<Long> findBindingCoupon();

    /**
     * 查询某个规则下用户绑定的优惠券数量
     * @param couponRuleId
     * @param phone
     * @param passengerId
     * @return
     */
    Integer couponTimes(@Param("couponRuleId") Long couponRuleId, @Param("phone") String phone, @Param("passengerId") Long passengerId);

    /**api/activity/create
     * 获取一张没有绑定的线路优惠券
     *
     * @param appKey
     * @param couponRuleId
     * @return
     */
    Coupon findOneCoupon(@Param("appKey") String appKey, @Param("couponRuleId") Long couponRuleId);

    List<Coupon> findOneLineCoupon(@Param("linesId") List<Long> linesId);

    int updateCouponPriceAndLineId(@Param("id") Long id, @Param("appKey") String appKey, @Param("couponPrice") BigDecimal couponPrice,@Param("lineId") Long lineId);

    /**
     * 保存优惠券信息到数据库.
     *
     * @param coupon 优惠券内容
     * @return 保存成功返回Id信息
     */
    Long insertRecord(Coupon coupon);

    /**
     * 根据ID删除优惠券.
     *
     * @param couponRuleId 优惠券规则id
     * @param appKey       系统key
     * @return Integer
     */
    int deleteByCouponRule(@Param("couponRuleId") Long couponRuleId, @Param("appKey") String appKey);

    /**
     * 获取优惠券数量.
     *
     * @param couponRuleId 优惠券规则id
     * @return Long
     */
    Long getRunningNumber(@Param("couponRuleId") Long couponRuleId, @Param("appKey") String appKey);

    /**
     * 获取优惠券数量.
     *
     * @param couponRuleId 优惠券规则id
     * @return Long
     */
    Long getTotalCountNumber(@Param("couponRuleId") Long couponRuleId, @Param("appKey") String appKey);

    /**
     * 查询所有优惠券信息.
     *
     * @param couponRuleId 优惠券规则id
     * @return List
     */
    List<Coupon> selectAllByRule(@Param("couponRuleId") Long couponRuleId,
                                 @Param("appKey") String appKey);

    /**
     * 根据主键查询优惠券信息.
     *
     * @param id 优惠券id
     * @return Coupon
     */
    Coupon selectByPrimaryKey(@Param("id") Long id, @Param("appKey") String appKey);

    /**
     * 根据主键查询优惠券信息.
     *
     * @param code 编码
     * @return Coupon
     */
    Coupon selectByCode(@Param("code") String code, @Param("appKey") String appKey);

    /**
     * 根据主键修改数据 .
     *
     * @param coupon 优惠券内容
     * @return Integer
     */
    int updateByPrimaryKey(Coupon coupon);

    /**
     * 分页查询优惠券.
     *
     * @param ruleId 优惠券规则id
     * @param code   编码
     * @param phone  手机号
     * @param offset 页数
     * @param size   每页数量
     * @param appKey 系统key
     * @return DataGrid
     */
    List<Coupon> selectByRuleWithParams(@Param("ruleId") Long ruleId, @Param("code") String code,
                                        @Param("phone") String phone, @Param("offset") Integer offset, @Param("size") Integer size,
                                        @Param("appKey") String appKey);

    /**
     * 统计优惠券信息.
     *
     * @param ruleId 优惠券规则id
     * @param code   编码
     * @param phone  手机号
     * @return long
     */
    long countByRuleWithParams(@Param("ruleId") Long ruleId, @Param("code") String code,
                               @Param("phone") String phone, @Param("appKey") String appKey);

    /**
     * 统计优惠券数量.
     *
     * @param couponRuleId 优惠券规则id
     * @param passengerId  客户id
     * @return Long
     */
    Long countByRuleAndPassenger(@Param("couponRuleId") Long couponRuleId,
                                 @Param("passengerId") Long passengerId);

    Long countByRuleAndPassengerGroup(@Param("couponRuleId") Long couponRuleId,
                                 @Param("passengerId") Long passengerId);

    /**
     * 根据客户查询有效优惠券.
     *
     * @param passengerId 客户id
     * @param appKey      系统key
     * @return List
     */
    List<Coupon> listValidByPassenger(@Param("passengerId") Long passengerId,
                                      @Param("appKey") String appKey);


    /**
     * 根据客户分页查询优惠券.
     *
     * @param passengerId 客户id
     * @param appKey      系统key
     * @param status      优惠券状态
     * @return List
     */
    List<Coupon> selectByPassenger(@Param("passengerId") Long passengerId,
                                   @Param("status") Integer status,
                                   @Param("couponType") String couponType,
                                   @Param("offset") Integer offset,
                                   @Param("size") Integer size, @Param("appKey") String appKey);

    /**
     * 根据客户分页查询优惠券.
     *
     * @param passengerId 客户id
     * @param appKey      系统key
     * @param status      优惠券状态
     * @return long
     */
    long countByPassenger(@Param("passengerId") Long passengerId, @Param("status") Integer status,
                          @Param("couponType") String couponType, @Param("appKey") String appKey);

    /**
     * 根据客户查询优惠券金额.
     *
     * @param passengerId 客户id
     * @param appKey      系统key
     * @return BigDecimal
     */
    BigDecimal sumMoneyByPassenger(@Param("passengerId") Long passengerId,
                                   @Param("appKey") String appKey);


}
